home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / commodore-scene-files / Geos / GEOS128 / GeosD81 / cs13.d81 / directory repair (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  11.0 KB  |  354 lines

  1. 100 REM !-----------------------------!
  2. 110 REM ! ARVEE'S DIRECTORY REPAIRMAN !
  3. 120 REM !                             !
  4. 130 REM !    C-1987  WHITAKER LABS    !
  5. 140 REM !                             !
  6. 150 REM !  BROUGHT TO YOU BY SCORMUS  !
  7. 160 REM !-----------------------------!
  8. 170 :
  9. 180 REM PROTECT GEOS FROM BASIC
  10. 190 IFPEEK(56)>126THENPOKE56,126:CLR
  11. 200 :
  12. 210 REM DIMS FLGS VARS CONSTNTS STRINGS
  13. 220 REM DIMENSIONS
  14. 230 DIM BF(23):REM BLKS FREE COMPUTED
  15. 240 DIM BD(20):REM DIR BLKS FOLLOWED
  16. 250 DIM M$(11):REM MSGS
  17. 260 DIM F$(7) :REM FILE NAMES
  18. 270 DIM BM(2) :REM BAM TEMP 0-7/8-F/10+
  19. 280 :
  20. 290 REM FLAGS
  21. 300 PE=0:REM PRNT ERR CHN 1=PRNT
  22. 310 IS=0:REM ILLEGAL SECTR
  23. 320 BD=0:REM BAD DIRECTORY
  24. 330 BB=0:REM BAD BLOCK
  25. 340 BP=0:REM BAD POINTER
  26. 350 NF=0:REM DIR NOT FIXED
  27. 360 BT=0:REM OFF TR 18
  28. 370 :
  29. 380 REM VARIABLES
  30. 390 X=0:Y=0:T=0:REM LOOP VARS
  31. 400 TR=18:SE=0:REM DEFAULT TR/SE
  32. 410 TV=18:SV=0:REM TR/SE PNTR VAL
  33. 420 AL=55537 :REM COLOR POKE PSEUDO BASE
  34. 430 M =0:D=0 :REM MESSAGE #/# LINES DOWN
  35. 440 CF=0:BL=0:REM COMP/ACTUAL BLKS FREE
  36. 450 ND=0:E=0 :REM NEW DOS VERS
  37. 460 CT=0     :REM # OF MISALLOC BLKS
  38. 470 P =0     :REM BUFFER POINTER
  39. 480 :
  40. 490 REM STRINGS
  41. 500 A$="":B$="":C$="":D$="":REM TMP STR
  42. 510 WP$="":REM WRITE PROTECT
  43. 520 NL$=CHR$(0):REM NULL
  44. 530 L$="└└└└└└└└└└└└└└└└└└└"
  45. 540 L2$=" └└└└└└└└└└└└└└└└└"
  46. 550 R1$=""
  47. 560 R2$="£"
  48. 570 :
  49. 580 REM GEOS SPECIFIC CONSTANTS
  50. 590 DA=33938:REM DISK TURBO FLG DRIVE A
  51. 600 DB=33939:REM DISK TURBO FLG DRIVE B
  52. 610 V2=49893:REM VERS 1.2 SETUP SYS
  53. 620 V3=49708:REM VERS 1.2/3 RESTART
  54. 630 VL=49158:REM GEOS BOOT & VERS # LOC
  55. 640 FORX=0TO8:REM CHECK FOR GEOSTOBOOT
  56. 650 GB$=GB$+CHR$(PEEK(VL+X)):REM STRING
  57. 660 NEXT:REM FOR POSS DESKTOP REENTRY
  58. 670 VE=PEEK(VL+X):REM GEOS VERS #
  59. 680 :
  60. 690 REM MESSAGES
  61. 700 M$(0)="Ü<< ╨RESS ╦EY ╞OR ═ENUá>>"
  62. 710 M$(1)="Ü<< ╨RESS ╦EY ╘O ┬OOT >>"
  63. 720 M$(2)="û<< ╫┴╥╬╔╬╟á!!!áá═╔╙┴╠╠╧├┴╘┼─ ┬╠╧├╦╙ >>"
  64. 730 M$(3)="<< ╧PERATION ┴BORTED .. ╚IT A ╦EY >>"
  65. 740 M$(4)="<< ╫┴╥╬╔╬╟ !!!  ┬┴─á─╔╥┼├╘╧╥┘ >>"
  66. 750 M$(5)="û<< ╫┴╥╬╔╬╟ !!!  ┬┴─á┼╬─á╨╘╥ >>"
  67. 760 M$(6)="<< ╧PERATION ╞AILED .. ╥ETRY >>"
  68. 770 M$(7)="Ü<< ╨RESS ╦EY FOR ═ENU >>
  69. 780 M$(8)="Ü<< ╫╨ ╙TATUS ├HANGED >>
  70. 790 M$(9)="<< ╔╠╠┼╟┴╠ ╧╞╞ ╨┴╟┼ ─╔╥┼├╘╧╥┘ ┬╠╧├╦ >>"
  71. 800 M$(10)="û<< ─┼╙╦╘╧╨á┬╧╥─┼╥ ╚┴╙á┬┼┼╬á┼╥┴╙┼─ >>"
  72. 810 M$(11)="<< ╫┴╥╬╔╬╟ !!! ─╔╥┼├╘╧╥┘á╧╞╞á╘╥╦á18 >>"
  73. 820 :
  74. 830 REM TITLE SCREEN & GET ROUTINE #
  75. 840 POKE53280,11:REM GREY BORDER
  76. 850 POKE53281, 0:REM BLACK SCREEN
  77. 860 :
  78. 870 PRINT"ôÆ        ░└└└└└└└└└└└└└└└└└└└└└«
  79. 880 PRINT"        ▌ £─╔╥┼├╘╧╥┘á╥┼╨┴╔╥═┴╬ ▌
  80. 890 PRINT"        ¡└└└└└└└└└└└└└└└└└└└└└╜
  81. 900 PRINT"         ù(₧╫ù)ÜRITE ╨ROTECT ─ISK
  82. 910 PRINT"         ù(₧╒ù)ÜN ╫RITE ╨ROTECT
  83. 920 PRINT"         ù(₧─ù)ÜESK ┬ORDER ╔NFO
  84. 930 PRINT"         ù(₧┴ù)ÜNALYZE ╘RACK 18
  85. 940 PRINT"         ù(₧╥ù)ÜEPAIR ─IRECTORY
  86. 950 PRINT"             ┴LLOCATE TRACK 18
  87. 960 PRINT"             ╞OLLOW DIR CHAIN
  88. 970 PRINT"             ╞IX LAST POINTER
  89. 980 PRINT"             ╞REE UNUSED BLKS
  90. 990 PRINT"         ù(₧┬ù)ÜASIC
  91. 1000 PRINT"         ù(₧╟ù)Ü┼╧╙
  92. 1010 :
  93. 1020 POKE198,0:WAIT198,1:GETA$
  94. 1030 IFA$="D"THEN 3750:REM GEOS INFO
  95. 1040 IFA$="A"THEN 2040:REM ANALYZE
  96. 1050 IFA$="R"THEN 2910:REM REPAIR
  97. 1060 IFA$="W"THEN 3500:REM WRITE PROT
  98. 1070 IFA$="U"THEN 3510:REM UN WP
  99. 1080 IFA$="B"THEN PRINT"æææÜ":END
  100. 1090 IFA$="G"THEN 1110:REM GO GEOS
  101. 1100 GOTO1020
  102. 1110 REM GEOS DESKTOP RETURN
  103. 1120 IF GB$<>"GEOS BOOT" THEN 1170
  104. 1130 POKE DA,0:POKE DB,0:REM TURBO OFF
  105. 1140 IF VE=18 THEN SYS V2:SYS V3
  106. 1150 IF VE=19 THEN SYS V3
  107. 1160 REM BOOT GEOS
  108. 1170 PRINT"ô       ░└└└└└└└└└└└└└└└└└└└└└└└«"
  109. 1180 PRINT  "       ▌ £╔╬╙┼╥╘á╟┼╧╙á┬╧╧╘á─╔╙╦ ▌"
  110. 1190 PRINT  "       ¡└└└└└└└└└└└└└└└└└└└└└└└╜Ü"
  111. 1200 M=1:D=15:GOSUB1260
  112. 1210 PRINT"ôLOAD"CHR$(34)"GEOS"CHR$(34)",8,1"
  113. 1220 PRINT "RUN
  114. 1230 POKE198,3:POKE631,19:POKE632,13:POKE633,13:STOP
  115. 1240 :
  116. 1250 REM FLASH MESSAGE # M DOWN D
  117. 1260 PRINT"";:FORX=0TOD:PRINT"";:NEXT
  118. 1270 POKE198,0
  119. 1280 FORX=1TO2
  120. 1290 PRINT"Ææ"
  121. 1300 IFX=2THENPRINT"";
  122. 1310 PRINT M$(M);
  123. 1320 FORY=1TO100:GETA$
  124. 1330 IF A$=""THEN NEXT:NEXT:GOTO1280
  125. 1340 IF A$="_"THEN RUN
  126. 1350 PRINT"Æ";:RETURN
  127. 1360 :
  128. 1370 REM CHECK DEV PRES
  129. 1380 CLOSE15:OPEN15,8,15:CLOSE15
  130. 1390 IF ST = 0 THEN RETURN
  131. 1400 PRINT" ─EVICE ╬OT ╨RESENT"
  132. 1410 M=3:D=23:GOSUB1260:RUN
  133. 1420 :
  134. 1430 REM INITIALIZE
  135. 1440 GOSUB1660:OPEN15,8,15,"I0:":RETURN
  136. 1450 :
  137. 1460 REM CHECK ERROR CHANNEL
  138. 1470 REM CLOSE ALL/OPEN/READ/PRINT
  139. 1480 GOSUB1660:OPEN15,8,15
  140. 1490 REM READ/PRINT
  141. 1500 PE=1:REM PRNT FLG
  142. 1510 REM READ ONLY
  143. 1520 INPUT#15,EN$,EM$,ET$,ES$
  144. 1530 IFEN$<>"00"THENPRINT:PRINT"";
  145. 1540 IF PE=1 THENPRINTEN$","EM$","ET$","ES$:PE=0
  146. 1550 IF EN$="00"THEN RETURN
  147. 1560 GOTO1410
  148. 1570 :
  149. 1580 REM INIT FOR IO
  150. 1590 GOSUB1380:REM CHK DEVICE PRESENT
  151. 1600 GOSUB1440:REM INITIALIZE DRIVE
  152. 1610 GOSUB1520:REM READ ERR
  153. 1620 GOSUB1690:REM ALLOC DISK BUFFER
  154. 1630 RETURN
  155. 1640 :
  156. 1650 REM DONE WITH IO
  157. 1660 FORX=1TO15:CLOSEX:NEXT:RETURN
  158. 1670 :
  159. 1680 REM ALLOCATE A DISK BUFFER
  160. 1690 OPEN2,8,2,"#":RETURN
  161. 1700 :
  162. 1710 REM READ  BUFFER
  163. 1720 PRINT#15,"U1";2;0;TR;SE:RETURN
  164. 1730 :
  165. 1740 REM WRITE BUFFER
  166. 1750 PRINT#15,"U2";2;0;TR;SE:RETURN
  167. 1760 :
  168. 1770 REM BUFFER POINTER
  169. 1780 PRINT#15,"B-P";2;P:RETURN
  170. 1790 :
  171. 1800 REM CHECK IF SECTOR IS LEGAL
  172. 1810 IS=0:REM SECTOR IS OK
  173. 1820 IF SE<0 THEN 1880
  174. 1830 IF TR<0 THEN 1880
  175. 1840 IF TR<18 THEN IF SE<21 THEN RETURN
  176. 1850 IF TR<25 THEN IF SE<19 THEN RETURN
  177. 1860 IF TR<31 THEN IF SE<18 THEN RETURN
  178. 1870 IF TR<36 THEN IF SE<17 THEN RETURN
  179. 1880 IS=1:REM SECTOR NOT OK
  180. 1890 RETURN
  181. 1900 :
  182. 1910 REM JOB QUEUE
  183. 1920 PRINT#15,"M-W"CHR$(8)CHR$(0)CHR$(2)CHR$(TR)CHR$(SE)
  184. 1930 PRINT#15,"M-W"CHR$(1)CHR$(0)CHR$(1)CHR$(JOB)
  185. 1940 FORT=0TO500
  186. 1950 POKE53280,(PEEK(53280)+1)AND15
  187. 1960 PRINT#15,"M-R"CHR$(1)CHR$(0)
  188. 1970 GET#15,E$:E=ASC(E$+NL$)
  189. 1980 IF E>127 THEN NEXT T
  190. 1990 POKE53280,11:
  191. 2000 IF E=1 THEN RETURN
  192. 2010 CLOSE15:M=6:D=23:GOSUB1260:RUN
  193. 2020 :
  194. 2030 REM DISPLAY TRACK 18 BAM
  195. 2040 PRINT"ô       ░└└└└└└└└└└└└└└└└└└└└└└└«"
  196. 2050 PRINT"       ▌ £┴╬┴╠┘┌┼ ─╔╥┼├╘╧╥┘á┬┴═ ▌"
  197. 2060 PRINT"       ¡└└└└└└└└└└└└└└└└└└└└└└└╜Ü"
  198. 2070 GOSUB1590:REM INIT IO
  199. 2080 BD=0:BP=0:BB=0:BT=0:REM SET FLAGS
  200. 2090 CF=0:REM COMPUTED FREE BLKS
  201. 2100 TR=18:SE=0:REM DEFAULTS
  202. 2110 REM INPUT BAM INFO
  203. 2120 PRINT"╥EADING ┬┴═ ........ ";
  204. 2130 GOSUB1720:REM U1
  205. 2140 GOSUB1500:REM READ/PRINT
  206. 2150 P=2:GOSUB1780:REM B-P
  207. 2160 GET#2,A$:ODV=ASC(A$+NL$)
  208. 2170 WP$="╧╬":IF ODV=65 THEN WP$="╧╞╞"
  209. 2180 P=72:GOSUB1780:REM B-P
  210. 2190 GET#2,A$,B$,C$,D$
  211. 2200 GOSUB1660:REM DONE IO
  212. 2210 BL=ASC(A$+NL$)      :REM FREE BLKS
  213. 2220 BM(0)=ASC(B$+NL$)   :REM BAM  0- 7
  214. 2230 BM(1)=ASC(C$+NL$)   :REM BAM  8-15
  215. 2240 BM(2)=ASC(D$+NL$)   :REM BAM 16-18
  216. 2250 REM COMPUTE/DISP BLKS FREE
  217. 2260 FORX=0TO2:FORY=0TO7
  218. 2270 BF( (8*X)+Y )=(BM(X) AND 2^Y)/2^Y
  219. 2280 NEXTY
  220. 2290 NEXTX
  221. 2300 PRINT"ææææ "L$L$
  222. 2310 PRINT"Ü    ╘RACK 18 ┬┴═      ┬LOCKS  ├OMPUTED"
  223. 2320 PRINT" 0....5....0....5..8   ╞REE     ╞REE"
  224. 2330 PRINT" ";
  225. 2340 FORX=0TO18:
  226. 2350 IF BF(X) = 0 THEN PRINT "*";:NEXT:GOTO2380
  227. 2360 CF=CF+1
  228. 2370 PRINT"-";:NEXT
  229. 2380 PRINT"   ";:IFBL<10THENPRINT" ";
  230. 2390 PRINTBL;
  231. 2400 PRINT"¥      ";
  232. 2410 IFCF<10THENPRINT" ";
  233. 2420 PRINTCF"¥   "
  234. 2430 IF CF=BL THEN 2450
  235. 2440 BD=1:PRINT"ææææ "L$""L$""
  236. 2450 PRINT" "L$;:IFBD=1THENPRINT"";:
  237. 2460 PRINTL$
  238. 2470 TV=18:SV=0 :REM 1ST BLK
  239. 2480 GOSUB1590:REM INIT IO
  240. 2490 PRINT"Ü ╘╥  ╙┼    ╨OINTER
  241. 2500 PRINTL2$
  242. 2510 SE=SV:TR=TV:IFNF=1THEN2710
  243. 2520 IF TV=0 THEN 2710
  244. 2530 REM CHAIN NEXT
  245. 2540 NF=0
  246. 2550 GOSUB1720:REM U1
  247. 2560 GOSUB1520:REM READ ERR
  248. 2570 P=0:GOSUB1780:REM B-P
  249. 2580 GET#2,TR$,SE$
  250. 2590 TV=ASC(TR$+NL$)
  251. 2600 SV=ASC(SE$+NL$)
  252. 2610 GOSUB1810:NF=IS:REM CHK LEGAL SECTOR
  253. 2620 BD(SE)=1:PRINT"Ü";
  254. 2630 IFBF(SE)<>0THENPRINT"";:BD=1:BB=1:POKEAL+SE,2
  255. 2640 IF TV>0 OR SV=255 THEN 2660
  256. 2650 PRINT""R1$"_┬┴─ ╨╘╥æ":BP=1:BB=0
  257. 2660 IFTR<>18THENIFTR<>0THENBT=1:PRINT" "L$"¥¥  ":GOTO2680
  258. 2670 IFBBTHENPRINTR1$"_┴╠╠╧├┴╘┼æ":BB=0
  259. 2680 PRINTTR;SE,TV;SV
  260. 2690 IF TV=0 THEN PRINTL2$
  261. 2700 GOTO2510
  262. 2710 GOSUB1660:REM DONE IO
  263. 2720 REM DISPLAY MISALLOC BLKS
  264. 2730 FORX=0TO18:IF BD(X)=1THEN 2810
  265. 2740 IF BF(X)>0 THEN 2810
  266. 2750 CT=CT+1:IFCT>14THEN2800
  267. 2760 PRINT""R2$"╒╬╒╙┼─á╙┼├╘╧╥╙
  268. 2770 PRINTR2$"┴╥┼á┴╠╠╧├┴╘┼─ææ
  269. 2780 FORY=0TOCT:PRINT:NEXT
  270. 2790 PRINTR2$"╙ECTOR " X"æ"
  271. 2800 POKE AL+X,2
  272. 2810 NEXTX
  273. 2820 PRINT"ù╫╨"WP$
  274. 2830 REM WHICH MSG
  275. 2840 M=0:IF BD=1 THEN M=4:REM BAD DIR
  276. 2850 IF CT>0 THEN M=2:REM MISALOC BLKS
  277. 2860 IF BP=1 THEN M=5:REM BAD END PTR
  278. 2870 IF BT=1 THEN M=11:REM DIR OFF TRK
  279. 2880 D=23:GOSUB1260:RUN
  280. 2890 :
  281. 2900 REM FIX DIR
  282. 2910 PRINT"ô    ░└└└└└└└└└└└└└└└└└└└└└«
  283. 2920 PRINT"    ▌ £╞╧╠╠╧╫╔╬╟á─╔╥┼├╘╧╥┘ ▌
  284. 2930 PRINT"    ¡└└└└└└└└└└└└└└└└└└└└└╜Ü
  285. 2940 TR=18:SE=0
  286. 2950 GOSUB1590:REM INIT IO
  287. 2960 :
  288. 2970 BF(0)=1
  289. 2980 GOSUB1720:REM U1
  290. 2990 GOSUB1520:REM READ ERR
  291. 3000 P=0:GOSUB1780:REM B-P
  292. 3010 GET#2,TR$,SE$
  293. 3020 TV=ASC(TR$+NL$)
  294. 3030 SV=ASC(SE$+NL$)
  295. 3040 IFTV=18THENBF(SV)=1:SE=SV:GOTO2980
  296. 3050 IF TV<>0 THEN BT=1:NF=1:GOTO3380
  297. 3060 IF SV=255 THEN PRINT"╠AST ─IR ╙ECTOR ╧╦   ";:GOTO3110
  298. 3070 PRINT               "╞IXING ╠AST ╙ECTOR . ";
  299. 3080 P=1:GOSUB1780:REM B-P
  300. 3090 PRINT#2,CHR$(255);
  301. 3100 P=0:GOSUB1780:GOSUB1750:REM B-P/U2
  302. 3110 GOSUB1500:REM READ/PRINT
  303. 3120 :
  304. 3130 REM ALLOC ALL BLKS TR 18
  305. 3140 TR=18:SE=0:GOSUB1590:REM REINIT IO
  306. 3150 PRINT"╥EADING ┬┴═ ........ ";
  307. 3160 GOSUB1720:REM U1
  308. 3170 GOSUB1500:REM READ/PRINT
  309. 3180 P=72:GOSUB1780:REM B-P
  310. 3190 PRINT#2,NL$;NL$;NL$;NL$;:REM 0 BAM
  311. 3200 P=0:GOSUB1780:REM B-P
  312. 3210 PRINT"╫RITING ┬┴═ ........ ";
  313. 3220 GOSUB1750:REM U2
  314. 3230 GOSUB1500:REM READ/PRINT
  315. 3240 PRINT"     ░└└└└└└└└└└└└└└└└└└«"
  316. 3250 PRINT"     ▌ £╘╥╦ 18 ┴╠╠╧├┴╘┼─ ▌
  317. 3260 PRINT"     ¡└└└└└└└└└└└└└└└└└└╜Ü"
  318. 3270 :
  319. 3280 REM FREE UNUSED BLOCKS
  320. 3290 GOSUB1590:REM REINIT IO
  321. 3300 PRINT"─EALLOCATING BLKS .. ";
  322. 3310 FORX=0TO18
  323. 3320 IF BF(X) THEN 3360
  324. 3330 PRINT#15,"B-F";0;18;X
  325. 3340 INPUT#15,EN,EM$,ET,ES:REM ERR CHN
  326. 3350 IF EN$<>"00" THEN PRINT "┼RROR IN ╙ECTOR"X:GOSUB1550:NF=1
  327. 3360 NEXTX
  328. 3370 GOSUB1480:REM CLOSE/OPEN/READ/PRINT
  329. 3380 GOSUB1660:REM DONE IO
  330. 3390 IF NF THEN 3440
  331. 3400 PRINT"    ░└└└└└└└└└└└└└└└└└└└└«
  332. 3410 PRINT"    ▌ £─╔╥┼├╘╧╥┘á╥┼╨┴╔╥┼─ ▌
  333. 3420 PRINT"    ¡└└└└└└└└└└└└└└└└└└└└╜Ü
  334. 3430 M=7:D=21:GOSUB1260:RUN
  335. 3440 PRINT"     ░└└└└└└└└└└└└└└└└└└«
  336. 3450 PRINT"     ▌ £╥┼╨┴╔╥╙ ╞┴╔╠┼─ ! ▌
  337. 3460 PRINT"     ¡└└└└└└└└└└└└└└└└└└╜Ü
  338. 3470 M=6:D=21:M=M+BT*5:GOSUB1260:RUN
  339. 3480 :
  340. 3490 REM EDIT DOS VERSION
  341. 3500 NDV=66:GOTO3520:REM WP ON
  342. 3510 NDV=65:REM WRITE PROT OFF
  343. 3520 PRINT"ô        ░└└└└└└└└└└└└└└└└└└└└└«
  344. 3530 PRINT"        ▌ £┼─╔╘╔╬╟á─╧╙á╓┼╥╙╔╧╬ ▌
  345. 3540 PRINT"        ¡└└└└└└└└└└└└└└└└└└└└└╜Ü
  346. 3550 REM NDV=NEW DOS VERSION 1541 => A
  347. 3560 REM WP OFF=65  ON=66
  348. 3570 GOSUB1590:REM INIT IO
  349. 3580 TR=18:SE=0       :REM BAM TRACK
  350. 3590 JOB=176:GOSUB1920:REM SEEK
  351. 3600 JOB=128:GOSUB1920:REM READ
  352. 3610 PRINT#15,"M-W"CHR$(2)CHR$(4)CHR$(1*U***ERROR******ERROR******ERROR******ERROR******ERROR******ERROR***
  353. 65535 ***ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR***;***ERROR******ERROR******ERROR******ERROR******ERROR***1***ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR***;***ERROR******ERROR******ERROR******ERROR******ERROR***1***ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR******ERROR***s***ERROR******ERROR******ERROR***;***ERROR******ERROR******ERROR******ERROR***
  354.